/**
 * The portal transaction framework. Provides and manages transactions for 
 * persistence access.
 * <p>
 * The {@link lumis.portal.transaction.PortalTransactionFactory}
 * provides methods for obtaining {@link lumis.portal.transaction.ITransaction}
 * instances. Use {@link lumis.portal.transaction.PortalTransactionFactory#createTransaction(boolean)}
 * for creating new transactions. The boolean parameter indicates if
 * the created transaction will be associated with the current thread as the
 * current active transaction. The current active transaction in a thread is
 * returned by
 * {@link lumis.portal.transaction.PortalTransactionFactory#getCurrentTransaction()}.
 * </p>
 * <p>
 * The the current transaction management is done by a stack associated with 
 * the current thread. When an active transaction ends (by executing its
 * <code>dispose</code> method), the previously active transaction 
 * (next transaction in the stack) becomes the current transaction for the 
 * thread. 
 * </p>
 * <p>
 * The recommended code pattern for creating a new transaction is the following:
 * <code>
 * <pre>
 * ITransaction transaction = PortalTransactionFactory.createTransaction(); // create transaction object
 * try
 * {
 * 	transaction.begin();
 * 
 * 	// execute transactional operations
 * 
 * 	transaction.commit();
 * }
 * finally
 * {
 * 	transaction.dispose(); // automatically rolls back if commit was not executed
 * }
 * </pre>
 * </code>
 * </p>
 *
 * @since 4.2.0
 * @version $Revision: 9601 $ $Date: 2008-07-18 15:38:17 -0300 (Fri, 18 Jul 2008) $
 */
package lumis.portal.transaction;